package gob.minedu.capacitacion.web.controller;



import java.text.DateFormat;
import java.util.Date;
import java.util.List;

import gob.minedu.capacitacion.cxa.bean.UsuarioBean;
import gob.minedu.capacitacion.cxa.service.UsuarioService;
import gob.minedu.capacitacion.shared.util.Constants;
import gob.minedu.capacitacion.shared.util.Util;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.commons.configuration.XMLConfiguration;
import org.apache.commons.configuration.SubnodeConfiguration;
import org.primefaces.component.column.Column;
import org.primefaces.component.graphicimage.GraphicImage;
//import org.primefaces.component.menuitem.MenuItem;
//import org.primefaces.component.submenu.Submenu;
//import org.primefaces.model.DefaultMenuModel;
//import org.primefaces.model.MenuModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;



@ManagedBean
@SessionScoped
@Component
public class ControladorInicio extends GenericControlador{
	
	private String usuario="";
	private String clave ="";
	
	//private MenuModel modeloDeMenu; 
	
		
		
	
	@Autowired
	private UsuarioService usuarioService;
		
	public String logueo() {
		String forward="";
		
		log.info("Entrando ... logueo() - ControladorInicio");
		
		try{
			FacesContext contexto = FacesContext.getCurrentInstance();
			
			System.out.println("Usuario:" +usuario);
			System.out.println("Clave:" +clave);
			
			
			UsuarioBean objUsuario = usuarioService.existeUsuario(usuario, clave);
			
			if(objUsuario!=null){//usuario valido
				
				HttpSession session = (HttpSession) contexto.getExternalContext().getSession(false);
				
				session.setAttribute("objetoUsuario", objUsuario);			
						

				return mostrarInicio();
				
			}else{
				
				
				contexto.addMessage(null, 
						new FacesMessage(FacesMessage.SEVERITY_ERROR,"", recursosLbl.getString("claveDeUsuarioErronea")));
				
				forward ="logueo";
				
			}			
			
		} catch (Exception ex) {
			if(log.isDebugEnabled()) log.debug(ex.getMessage(),ex);
            else log.error(ex.getMessage());
		
		}

		
		log.info("Saliendo ... logueo() - ControladorInicio");
		
		return forward;
		
		
	}
	
	public String mostrarInicio(){
		
		//generarMenu();
		
		return "inicio";
		
	}
	
	
	
	@SuppressWarnings("unchecked")
	/*private void generarMenu() {

		modeloDeMenu = new DefaultMenuModel();  
        	
		MenuItem itemDeMenu = new MenuItem();  
		//menuItem.setId("item1");
		itemDeMenu.setValue("Inicio");
		itemDeMenu.setAjax(false);
		itemDeMenu.setActionExpression(Util.createMethodExpression("#{controladorInicio.mostrarInicio}"));
		modeloDeMenu.addMenuItem(itemDeMenu);
		
		try {
			XMLConfiguration configuracionXML = new XMLConfiguration(Constants.CONSTRUCTOR_DE_MENU);
			
			 //just to replace the default delimiter: ','
			configuracionXML.setDelimiterParsingDisabled(true);
				        
			List < SubnodeConfiguration > menus = configuracionXML.configurationsAt("menu");
	        			
	        for (int i = 0; i < menus.size(); i++) {
	        	SubnodeConfiguration subnodoMenu = menus.get(i);
	            Submenu menu = new Submenu();	            
        		String[] menuPerfiles = subnodoMenu.getString("[@perfiles]").split("-");
        		if(esPerfilDeUsuarioPermitido(menuPerfiles)){
        		       		
		            menu.setLabel(subnodoMenu.getString("[@nombre]"));  
		        	List < SubnodeConfiguration > columnas = subnodoMenu.configurationsAt("columna");
		        	for (int j = 0; j < columnas.size(); j++) {
		        		SubnodeConfiguration subnodoColumna = columnas.get(j);
		        		Column columna = new Column();
		        		int contadorDeSubmenus = 0;
		        		if(subnodoColumna.getString("[@imagen]") != null){
		        	        GraphicImage imagen = new GraphicImage();
		        	        imagen.setValue(subnodoColumna.getString("[@imagen]"));
		        	        columna.getChildren().add(imagen);
		        	        contadorDeSubmenus++;
		        		} else {
			        		List < SubnodeConfiguration > submenus = subnodoColumna.configurationsAt("submenu");
				        	for (int k = 0; k < submenus.size(); k++) {
				        		SubnodeConfiguration subnodoSubmenu = submenus.get(k);
				                Submenu submenu = new Submenu();  
				                submenu.setLabel(subnodoSubmenu.getString("[@nombre]"));
				                int contadorDeItems = 0;
				        		List < SubnodeConfiguration > menuitems = subnodoSubmenu.configurationsAt("item");
					        	for (int l = 0; l < menuitems.size(); l++) {
					        		SubnodeConfiguration subnodoItem = menuitems.get(l);
					        		String[] perfiles = subnodoItem.getString("[@perfiles]").split("-");
					        		if(esPerfilDeUsuarioPermitido(perfiles)){
					        			itemDeMenu = new MenuItem();
					        			itemDeMenu.setValue(subnodoItem.getString("[@nombre]"));
					        			itemDeMenu.setAjax(false);
					        			itemDeMenu.setActionExpression(Util.createMethodExpression(subnodoItem.getString("[@url]")));
					        			submenu.getChildren().add(itemDeMenu);
					        			contadorDeItems++;
					        		}
					        	}
					        	if(contadorDeItems > 0){
					        		columna.getChildren().add(submenu);
					        		contadorDeSubmenus++;
					        	}
				        	}			        	
		        		}
		        		if(contadorDeSubmenus > 0){
		        			menu.getChildren().add(columna);
		        		}
		        	}
		        	modeloDeMenu.addSubmenu(menu);
        		}
			}
	        
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		itemDeMenu = new MenuItem();  
		itemDeMenu.setValue("Salir");  
		itemDeMenu.setAjax(false);
		itemDeMenu.setActionExpression(Util.createMethodExpression("#{controladorInicio.salir}"));
		modeloDeMenu.addMenuItem(itemDeMenu);
		
	}*/
	
	private boolean esPerfilDeUsuarioPermitido(String[] perfiles) {
		
		
		return true;
		
	}
	
	
	public String salir() {
		
		FacesContext contexto = FacesContext.getCurrentInstance();
		ExternalContext contextoExterno = contexto.getExternalContext();
	  
		HttpServletRequest peticion = (HttpServletRequest) contextoExterno.getRequest();
		peticion.getSession(false).invalidate();
	    
		return "logueo";
		  
	}
	
	

	public String getUsuario() {
		return usuario;
	}

	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}

	public String getClave() {
		return clave;
	}

	public void setClave(String clave) {
		this.clave = clave;
	}
	
//	public MenuModel getModeloDeMenu() {
//		return modeloDeMenu;
//	}
//
//	public void setModeloDeMenu(MenuModel modeloDeMenu) {
//		this.modeloDeMenu = modeloDeMenu;
//	}
	
	public String getHoraServidor() {
		DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
		return df.format(new Date());
	}

	
	
	

	
	
	
	
}